#ifndef _UNIF_H
#define _UNIF_H

class Promenna
{
  protected:
    char *jmeno;
    int typ,dlk;
    Qstrom* obsah;
    Promenna* dal;
  public:
    Promenna(char* j,Qstrom* o,int t,Promenna* d) { jmeno=j; obsah=o; typ=t; dal=d; dlk=-1; }
    char* vjmeno() { return jmeno; }
    int vtyp() { return typ; }
    Qstrom* vobsah() { return obsah; }
    Promenna* dalsi() { return dal; }
    int delka() { return dlk; }
    void ndelka(int d) { dlk=d; }
    void zmensit() { dlk--; }
};

class Promenne
{
  protected:
    Promenna* prom;
  public:
    Promenne() { prom=NULL; }
    ~Promenne() { smaz(NULL); }
    void pridat(char* j,Qstrom* o,int t) { Promenna* p=new Promenna(j,o,t,prom); prom=p; }
    void pridat(char* j,Qstrom* o,int t,int d) { Promenna* p=new Promenna(j,o,t,prom); p->ndelka(d); prom=p; }
    Promenna* promenna(char*);
    void vypis(int);
    //void vypis2(int);
    Promenna* pozice() { return prom; }
    void smaz(Promenna*);
};

class Volba
{
  protected:
    int dlk;
    char* jmn;
    Promenna* pzc;
  public:
    Volba* dal;
    Volba(int d,char* j,Promenna* p) { dlk=d; jmn=j; pzc=p; dal=NULL; }
    ~Volba() { if(dal) delete dal; }
    int delka() { return dlk; }
    void zmensit() { dlk--; }
    char* jmeno() { return jmn; }
    Promenna* pozice() { return pzc; }
};

int ladeni(Qprogram*,int,int,char*);

#endif